#ifndef TESTCASE_H
#define TESTCASE_H

#include"USvgIconEngine.h"
#include<QIcon>
#include<QPushButton>

//测试用例有哪些，覆盖到USvgIconEngine每个接口
USvgIconEngine* engine = new USvgIconEngine;

void test_addFile(int case_dx,const QString& filepath,const QSize& size,QIcon::Mode mode,QIcon::State state)
{
    qDebug() << "第" << case_dx << "次addFile:";
    engine->addFile(filepath,size,mode,state);
    qDebug() << "baseSvg = " << engine->getBaseSvg();
    engine->printSvgCache(engine->getSvgCache());
}

void test_pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
{
    engine->pixmap(size,mode,state);
    engine->printPcmCache();
    qDebug() << "\n";
}

void test_svg_icon_engine_single() //接口的独立测试【可能并不适合模拟实际的QIcon的一般场景】
{
    //addFile测试
    test_addFile(1,":/svgs/resources/1.svg",QSize(100,100),QIcon::Normal,QIcon::On);
    test_addFile(2,":/svgs/resources/2.svg",QSize(24,24),QIcon::Disabled,QIcon::Off);
    test_addFile(3,":/svgs/resources/3.svg",QSize(36,36),QIcon::Active,QIcon::Off);

    test_addFile(4,":/svgs/resources/4.svg",QSize(136,136),QIcon::Active,QIcon::On);
    test_addFile(5,":/svgs/resources/5.svg",QSize(26,26),QIcon::Selected,QIcon::On);

    qDebug() << "\n\n";

    //pixmap()测试
    //pixmap()大部分场景，都是基于addFile所存储的图片，进行查找
    //以下应该是相对于 addFile来说的，上面测试中，addFile最后加入的是：5.svg，则baseSvg = 5.svg
    //则 pixmap(QSize(100,100),QIcon::Normal,QIcon::On);,相当于是想获取 一张 mode=Normal，state=On，size = (100,100)的 5.svg

    //所以，更合理的测试方法应该是：一个addFile，多个pixmap()
    //addFile(1.svg)
    //pixmap(...)
    //pixmap(...)
    //pixmap(...)
    test_pixmap(QSize(100,100),QIcon::Normal,QIcon::On);
    test_pixmap(QSize(24,24),QIcon::Disabled,QIcon::Off);
    test_pixmap(QSize(36,36),QIcon::Active,QIcon::Off);
    test_pixmap(QSize(136,136),QIcon::Active,QIcon::On);
    test_pixmap(QSize(26,26),QIcon::Selected,QIcon::On);

    //应该命中主缓存的情况
    qDebug() << "是否命中？";
    test_pixmap(QSize(36,36),QIcon::Active,QIcon::Off);
}

void test_svg_icon_engine_all()//模拟实际的QIcon场景测试【这个要基于 实际安装的嵌入的plugin，因为不是直接调Engine接口了】
{
//    USvgIconEngine* svgEngine = new USvgIconEngine;
    //对于同一个QIcon对象，基于不同mode，state，size，指定不同图片
    // QIcon:图片 == 1:N
    /**
     * Normal, Disabled, Active, Selected
     * On, Off
     * 默认：Normal 0、Off 1
     * 2*mode+state = 1
     */
    //插入图片
    qDebug() << "插入图片——————————>";
    QIcon icon(":/svgs/resources/1.svg"); // 会调用addFile，而addFile有默认参数，默认mode、state是Normal, Off,mskey = 1
    icon.addFile(":/svgs/resources/2.svg", QSize(), QIcon::Normal, QIcon::On); // 悬停状态 mskey = 0
    icon.addFile(":/svgs/resources/3.svg", QSize(), QIcon::Active, QIcon::On); // 按下状态 mskey = 4
    icon.addFile(":/svgs/resources/4.svg", QSize(), QIcon::Disabled, QIcon::Off); // 禁用状态 mskey = 3

    qDebug() << "\n第1次查找图片——————————>";

    //查找图片
    QSize size = QSize(100,100);
    QIcon::Mode mode = QIcon::Active;
    QIcon::State state = QIcon::On;
    QPixmap pm = icon.pixmap(size,mode,state);

    qDebug() << "\n第2次查找图片——————————>";
//    QSize size = QSize(100,100);
//    QIcon::Mode mode = QIcon::Active;
//    QIcon::State state = QIcon::On;
//    size = QSize(200,200);
    mode = QIcon::Disabled;
    QPixmap pm2 = icon.pixmap(size,mode,state);

}






#endif // TESTCASE_H
